//addLoadEvent函数
function addLoadEvent(func){
    var oldonload=window.onload;
    if(typeof window.onload!='function'){
        window.onload=func;
    }else{
        window.onload=function(){
            oldonload();
            func();
        }
    }
}
//inertAfter函数
function insertAfter(newElement,targetElement){
    var parent=targetElement.parentNode;
    if(parent.lastChild==targetElement){
        parent.appendChild(newElement);
    }else{
        parent.insertBefore(newElement,targetElement.nextSibling);
    }
}
//下一个元素节点函数
function getNextElment(node){
    if(node.nodeType==1){
        return node;
    }
    if(node.nextSibling){
        return getNextElement(node.nextSibling);
    }
    return null;
}

//赋类函数
function addClass(element,value){
    if(!element.className){
        element.className=value;
    }else{
        newClassName=element.className;
        newClassName+="";
        newClassName+=value;
        element.className=newClassName;
    }
}

//赋类函数完善版
function stringIndexOf(arr,key){
    for(var i=0;i<arr.length;i++){
        if(arr[i]===key) return i;
    }
    return -1;
}
function addClassName(eleArr,classname){
    for(var i=0;i<eleArr.length;i++){
        if(eleArr[i].className!==""){
            eleArr[i].className=classname;
        }else{
            var classArr=eleArr[i].className.split(" ");
            if(stringIndexOf(classArr,classname)===-1){
                eleArr[i].className+=" "+classname;
            }
        }
    }

}

//删除类名
function stringIndexOf(arr,key) {
    for (var i = 0; i < arr.length; i++) {
        if (arr[i] === key) {
            return i;
        }
    }
    return -1;
}
function removeClassName(eleArr,classname){
    for(var i=0;i<eleArr.length;i++){
        if(eleArr[i].className!==""){
            var arrClassName=eleArr[i].className.split(" ");
            if(stringIndexOf(arrClassName,classname)!==-1){
                arrClassName.splice(stringIndexOf(arrClassName,classname),1);
                eleArr[i].className=arrClassName.join("");
            }
        }
    }
}


//getElementByClassName()函数
function getElementsByClassName(node,classname){
    if(node.getElementsByClassName){
        //使用现有方法
        return node.getElementsByClassName(classname);
    }else{
        //封装一个新方法
        var results=new Array();
        var elems=node.getElementsByTagName("*");
        for(var i=0;i<elems.length;i++){
            if(elems[i].className.indexOf(classname)!=-1){
                results[results.length]=elems[i];
            }
        }
        return results;
    }
}

//addEventListener()执行原理
function fn(str,fn,ele){
    var oldEvent=ele["on"+str];
    ele["on"+str]=function(){
        //不能直接执行函数，因为我们还不知道之前有没有绑定过同样的事件
        //进行判断，若有则先执行之前的，否则直接执行
        if(oldEvent){
            oldEvent();
            fn();
        }else{
            fn();
        }
    }
}

//利用json实现
//事件监听绑定兼容写法：满足火狐谷歌和IE678
//兼容写法(方法一)
EventListen={
    addEvent:function(ele,fn,str){
        //通过判断方式兼容IE678
        if(ele.addEventListener){
            //直接调用
            ele.addEventListener(str,fn);
        }else if(ele.attachEvent){
            ele.attachEvent("on"+str,fn);
        }else{
            var oldEvent=ele["on"+str];
            ele["on"+str]=function(){
                //不能直接执行函数，因为我们还不知道之前有没有绑定过同样的事件
                //进行判断，若有则先执行之前的，否则直接执行
                if(oldEvent){
                    oldEvent();
                    fn();
                }else{
                    fn();
                }
            }
        }
    }
}

//事件监听兼容写法（方法二）
function eventListener(ele,attr,fn){
    if(ele.addEventListener){
        ele.addEventListener(attr,fn,false);
    }else{
        ele.attachEvent("on"+attr,function(){
            fn.call(ele);
        })
    }
}

//事件监听解绑兼容（对应上面的绑定）
EventListen.addEvent(btn,fn1,"click");
EventListen={
    deleteEvent:function(ele,fn,str){
        if(ele.removeEventListener){
            ele.removeEventListener(str,fn);
        }else if(ele.detachEvent){
            ele.detachEvent("on"+str,fn);
        }else{
            ele["on"+str]=null;
        }
    }
}

//鼠标事件event的兼容写法
ev=ev||event;

//阻止事件冒泡的兼容写法
//火狐、谷歌、IE9+
if(event&&event.stopPropagation){
    event.stopPropagation();
}else{
    //IE678
    event.cancelBubble=true;
}

//获取事件驱动对象ev.target兼容写法
ev.target?ev.target:ev.srcElement;

//封装indexOf()方法
function arrindexOf(arr,key){
    for(var i=0;i<arr.length;i++){
        if(arr[i]===key){
            return i;
        }
    }
        return -1;
}

//滚动事件scrollTop和scrollLeft兼容DTD写法
    document.title=window.pageYOffset||document.body.scrollTop||document.documentElement.scrollTop;
    document.title=window.pageXOffset||document.body.scrollLeft||document.documentElement.scrollLeft;
    document.title=document.body.scrollTop+document.documentElement.scrollTop;



//封装一个兼容的scroll(),返回值是json，用scroll().top获取scrollTop属性
//封装一个兼容的scroll(),返回值是json，用scroll().left获取scrollLeft属性
function scroll(){
//        if(window.pageYOffset!==undefined){
//            return{
            //谷歌、火狐、IE9+
//                "top":window.pageYOffset,
//                "left":window.pageXOffset
//            };
//          IE678
//        }else if(document.compatMode===CSS1Compat){
//            return{
//                "top":document.documentElement.scrollTop,
//                "left":document.documentElement.scrollLeft
//            };
//        }else{
//            return{
//                "top":document.body.scrollTop,
//                "left":document.body.scrollLeft
//            };
//        }
    //简单版
    return{
        "top":window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop,
        "left":window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft
    };

}

//相对于文本定位的封装方法
function getPosition(element,atrr){
    var n=0;
    while(element){
        atrr==="left"?n+=element.offsetLeft:n+=element.offsetTop;
        element=element.offsetParent;
    }
    return n;
}

//鼠标获取和取消兼容写法
window.getSelection?window.getSelection():document.selection.createRange().text;
window.getSelection?window.getSelection().removeAllRanges():document.selection.empty();

//封装显示隐藏元素
function show(ele){
    ele.style.display="block";
}
function hide(ele){
    ele.style.display="none";
}


//获取屏幕可视区域的宽高
function client(){
    // if(window.innerHeight!==undefined){
    //     return {
    //         "width":window.innerWidth,
    //         "height":window.innerHeight
    //     }
    // }else if(document.compatMode==="CSS1Compat"){
    //     return {
    //         "width":document.documentElement.clientWidth,
    //         "height":document.documentElement.clientHeight
    //     }
    // }else{
    //     return{
    //         "width":document.body.clientWidth,
    //         "height":document.body.clientHeight
    //     }
    // }

    //简单版
    return {
        "width":window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,
        "height":window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight
    }
}


//获取元素样式带单位（通过此方法获取的样式是通过浏览器计算的来的，所以不可以进行判断）
function getStyle(obj,attr){
    return obj.currentStyle?obj.currentStyle[attr]:getComputedStyle(obj)[attr];
    //三元运算，if判断的特殊写法
}

//trim()函数封装
function trim(str){
    var aaa=str.replace(/(^\s+)|(\s+$)/g,"");
    // var aaa=str.replace(/^\s*|\s*$/g,"");
    return aaa;
}


// 鼠标滚轮事件兼容
function mouseScroll(obj,topFn,bottomFn){
    //火狐浏览器监听
    if(window.navigator.userAgent.indexOf("Firefox")>=0){
        obj.addEventListener("DOMMouseScroll",function (ev){
            ev = ev || event;
            where(ev) ? topFn() : bottomFn();
            //取消火狐浏览器的默认样式
            ev.preventDefault();
        },false);
    }else{
        //IE浏览器的事件监听
        obj.onmousewheel = function (ev){
            ev = ev || event
            where(ev) ? topFn() : bottomFn();
            //取消IE浏览器的默认样式
            return false;
        }
    }
}
function where(ev){
    var b = true;
    if(ev.wheelDelta){
        b = ev.wheelDelta>0 ? true : false;
    }else{
        b = ev.detail<0 ? true : false;
    }
    return b;
}


//对cookie的处理封装

//设置cookie
function setCookie(key,value,t){
    var oDate=new Date();
    oDate.setDate(oDate.getDate()+t);
    document.cookie=key+"="+encodeURI(value)+";expires="+oDate.toGMTString();
}
//获取cookie的值
function getCookie(key){
    var arr1=document.cookie.split("; ");
    for(var i=0;i<arr1.length;i++){
        var arr2=arr1.split("=");
        if(key===arr2[0]){
            return decodeURI(arr2[1]);
        }
    }
}
alert(getCookie("username"));

//删除cookie的值
function removeCookie(key){
    setCookie(key,"",-1);
}

//利用正则获取元素类名
function getClassName(ele){
    var str=ele.className;
    var arr=[];
    arr.push(str.match(/\b\w+\b/g));
    return arr;
}


//Ajax原生js书写get请求方法data为请求数据
function ajax(url,data,fnSucc,fnFaild){
    //参数：1、连接服务器的地址；2、成功时函数；3、失败时函数
    //1、创建Ajax对象
    var oAjax = null;
    //此处加window.是因为不加的话默认看成变量，变量未定义会报错；
    //而加上之后，变成window的属性，属性1不存在不会报错
    if(window.XMLHttpRequest){
        oAjax = new XMLHttpRequest(); //ie6及以下不兼容
    }else{
        oAjax = new ActiveXObject("Microsoft.XMLHTTP");//ie6自带的插件
    }
    //2、连接服务器(get在此处url加数据)--->?name=jack&age=18
    if(data){
        url+="?";
        url+=data;
        oAjax.open('get',url,true);
    }else{
      oAjax.open('get',url,true);  
    }
    oAjax.send();

    //4、接收服务器的返回
    oAjax.onreadystatechange = function(){
        if(oAjax.readyState ==4){  //完成
            if(oAjax.status ==200){
                //alert('成功： '+oAjax.responseText);
                fnSucc(oAjax.responseText);
            }else{
                //alert('失败');
                if(fnFaild){
                    fnFaild();
                }
            }
        }
    }
}

//Ajax原生js书写post请求方法
function ajax(url,data,fnSucc,fnFaild){
    var oAjax = null;
    if(window.XMLHttpRequest){
        oAjax = new XMLHttpRequest(); //ie6及以下不兼容
    }else{
        oAjax = new ActiveXObject("Microsoft.XMLHTTP");//ie6自带的插件
    }
    oAjax.open('post',url,true);
     //post设置HTTP协议头（修改了发送给服务器请求报文的内容）
        oAjax.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    //3、发送请求(post在此处加数据-->"name=jack")
    if(data){
       oAjax.send(data); 
    }else{
       oAjax.send(); 
    }
    oAjax.onreadystatechange = function(){
        if(oAjax.readyState ==4){  //完成
            if(oAjax.status ==200){
                //alert('成功： '+oAjax.responseText);
                fnSucc(oAjax.responseText);
            }else{
                //alert('失败');
                if(fnFaild){
                    fnFaild();
                }
            }
        }
    }
}



//原生js书写Ajax简化版
function ajax(url,fnSucc,fnFaild){
    var oAjax =window.XMLHttpRequest?new XMLHttpRequest():new ActiveXObjext("Microsoft.XMLHTTP");
    oAjax.open('GET',url,true);
    oAjax.send();
    oAjax.onreadystatechange = function(){
        if(oAjax.readyState ==4){  //完成
            if(oAjax.status ==200){
                fnSucc(oAjax.responseText);
            }else{
                    fnFaild&&fnFaild();
            }
        }
    }
}

//Ajax的组合封装
function ajax(url,data,method,fnSucc,fnFaild){
    var oAjax =window.XMLHttpRequest?new XMLHttpRequest():new ActiveXObjext("Microsoft.XMLHTTP");
    if(method==="get"){
        if(data){
            url+="?";
            url+=data;
        }else{}
        oAjax.open(method,url,true);
        oAjax.send();
    }else{
        oAjax.open(method,url,true);
        oAjax.setRequestHeader("Content-type","application/x-www-form-urlencoded");
        if(data){
            oAjax.send(data);
        }else{
            oAjax.send();
        }
    }
    oAjax.onreadystatechange = function(){
        if(oAjax.readyState ==4){  //完成
            if(oAjax.status ==200){
                fnSucc(oAjax.responseText);
            }else{
                fnFaild&&fnFaild();
            }
        }
    }
}

// jQuery事件绑定与解绑的方法
//第一种
/*
*$(元素).click(function(){
    //执行函数，可以绑定多个事件
}) */

//第二种
/*
*$(元素).bind(事件,function(){
    //执行函数（绑定多个事件在事件处用空格隔开）
}) */

//以上两种方法统一解绑方式
/*$(元素).unbind(事件);*/
//第三种
/*$(父系元素).delegate(操作元素,事件,function(){
    //执行函数
})
*/

//解绑
/*$(父系元素).undelegate(操作元素,事件);*/

//第四种(常用方式)

/*$(父系元素).on(事件,操作元素,function(){
    //执行函数
})
*/

//解绑
/*$(父系元素).off(事件,操作元素) */

//HTML5全屏兼容写法
var docElm=document.documentElement;
if(docElm.requestFullscreen){
    docElm.requestFullscreen();
}else if(docElm.mozRequestFullScreen){
    docElm.mozRequestFullScreen();
}else if(docElm.webkitRequestFullScreen){
    docElm.webkitRequestFullScreen();
}

//HTML5获取地理位置兼容写法
function getLocation(){
    if (navigator.geolocation){
        navigator.geolocation.getCurrentPosition(showPosition,showError);
    }else{
        alert("浏览器不支持地理定位。");
    }
}
function showError(error){
    switch(error.code) {
        case error.PERMISSION_DENIED:
            alert("定位失败,用户拒绝请求地理定位");
            break;
        case error.POSITION_UNAVAILABLE:
            alert("定位失败,位置信息是不可用");
            break;
        case error.TIMEOUT:
            alert("定位失败,请求获取用户位置超时");
            break;
        case error.UNKNOWN_ERROR:
            alert("定位失败,定位系统失效");
            break;
    }
}
function showPosition(position){
    var lat = position.coords.latitude; //纬度
    var lag = position.coords.longitude; //经度
    alert('纬度:'+lat+',经度:'+lag);
}
//判断该属性只存在于原型中
function hasPrototypeProperty(object,name){
    return !object.hasOwnProperty(name)&&(name in object);
}
// 一般情况下，IOS和Android系统都会默认某长度内的数字为电话号码，即使不加也是会默认显示为电话的，因此，取消这个很有必要
// <meta name="format-detection" content="telephone=no" />
// 允许全屏模式浏览，隐藏浏览器导航栏
// <meta name="apple-mobile-web-app-capable" content="yes" />
// 它指定的iphone中safari顶端的状态条的样式 默认值为default（白色），可以定为black（黑色）和black-translucent（灰色半透明）
// <meta name="apple-mobile-web-app-status-bar-style" content="black">


//查询字符串参数
function getQueryStringArgs(){
    //取得查询字符串并去掉开头的问号
    var qs=(location.search.length>0?location.search.substring(1) :""),
    //保存数据的对象
    args={};
    //取得每一项
    items=qs.length?qs.split("&"):[],
    item=null;
    name=null,
    value=null,
    //在for循环中使用
    i=0,
    len=items.length;
    //逐个将每一项添加到args对象中
    for(i=0;i<len;i++){
        item=items[i].spilt("=");
        name=decodeURIComponent(item[0]);
        value=decodeURIComponent(item[1]);
        if(name.length){
            args[name]=value;
        }
    }
    return args;
}